--- mod_encoding.c.orig 2006-05-20 18:04:44.000000000 +0900 +++ mod_encoding.c 2006-05-20 18:03:31.000000000 +0900 @@ -74,7 +74,8 @@ #include #include #include -/* #include */ +#include +#include #include @@ -185,13 +186,20 @@ char *buff; char *keys[] = { "Destination", NULL }; int i; + const char *query_string; + char *unparsed_uri; /* Normalize encoding in HTTP request line */ - ap_unescape_url(r->unparsed_uri); - if ((buff = iconv_string(r, cd, r->unparsed_uri, - strlen(r->unparsed_uri))) == NULL) - return -1; - ap_parse_uri(r, buff); + query_string = apr_pstrdup(r->pool, r->unparsed_uri); + unparsed_uri = ap_getword(r->pool, &query_string, '?'); + ap_unescape_url(unparsed_uri); + if ((buff = iconv_string(r, cd, unparsed_uri, strlen(unparsed_uri))) == NULL) + return -1; + if (query_string && strlen(query_string) > 0) { + ap_parse_uri(r, apr_pstrcat(r->pool, buff, "?", query_string, NULL)); + } else { + ap_parse_uri(r, buff); + } ap_getparents(r->uri); /* normalize given path for security */ /* Normalize encoding in HTTP request header(s) */ @@ -232,7 +240,7 @@ for (i = 0 ; i < encmap->nelts ; i += 2) { - if (ap_regexec((regex_t *)list[i], lookup, 0, NULL, 0) == 0) { + if (ap_regexec((ap_regex_t *)list[i], lookup, 0, NULL, 0) == 0) { apr_array_cat(encs, (apr_array_header_t *)list[i + 1]); return encs; } @@ -290,7 +298,7 @@ /* register useragent with UserAgent: pattern */ if (*args && (arg = ap_getword_conf_nc(cmd->pool, &args))) { *(void **)apr_array_push(conf->client_encoding) = - ap_pregcomp(cmd->pool, arg, REG_EXTENDED|REG_ICASE|REG_NOSUB); + ap_pregcomp(cmd->pool, arg, AP_REG_EXTENDED|AP_REG_ICASE|AP_REG_NOSUB); } /* register list of possible encodings from above useragent */ @@ -351,25 +359,25 @@ ***************************************************************************/ static const command_rec mod_enc_commands[] = { - {"EncodingEngine", - set_encoding_engine, NULL, - OR_ALL, FLAG, "Usage: EncodingEngine (on|off)"}, - - {"SetServerEncoding", - set_server_encoding, NULL, - OR_ALL, TAKE1, "Usage: SetServerEncoding "}, - - {"AddClientEncoding", - add_client_encoding, NULL, - OR_ALL, RAW_ARGS, "Usage: AddClientEncoding [ ...]"}, - - {"DefaultClientEncoding", - default_client_encoding, NULL, - OR_ALL, RAW_ARGS, "Usage: DefaultClientEncoding "}, - - {"NormalizeUsername", - set_normalize_username, NULL, - OR_ALL, FLAG, "Usage: NormalizeUsername (on|off)"}, + AP_INIT_FLAG("EncodingEngine", + set_encoding_engine, NULL, + RSRC_CONF | ACCESS_CONF, "Usage: EncodingEngine (on|off)"), + + AP_INIT_TAKE1("SetServerEncoding", + set_server_encoding, NULL, + RSRC_CONF | ACCESS_CONF, "Usage: SetServerEncoding "), + + AP_INIT_RAW_ARGS("AddClientEncoding", + add_client_encoding, NULL, + RSRC_CONF | ACCESS_CONF, "Usage: AddClientEncoding [ ...]"), + + AP_INIT_RAW_ARGS("DefaultClientEncoding", + default_client_encoding, NULL, + RSRC_CONF | ACCESS_CONF, "Usage: DefaultClientEncoding "), + + AP_INIT_FLAG("NormalizeUsername", + set_normalize_username, NULL, + RSRC_CONF | ACCESS_CONF | OR_AUTHCFG, "Usage: NormalizeUsername (on|off)"), {NULL} };